/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package view;

import com.sun.lwuit.Dialog;
import com.sun.lwuit.TextArea;
import com.sun.lwuit.Command;
import com.sun.lwuit.Display;
import com.sun.lwuit.Label;
import com.sun.lwuit.events.ActionEvent;
import com.sun.lwuit.layouts.BorderLayout;
import java.util.Vector;
import view.commands.CenterCommand;

/**
 *
 * @author Kvest
 */
public class MessageBox extends Dialog  //Сделать чтоб показывались по очереди(возможно на отображение проверить что показано сообщение и просто поменять текст), сделать наверно синглтоном
{
    public static final int OK_ID = 1;
    
    private static MessageBox instance = null;
    private static boolean isShown = false;
    
    private TextArea message;
    private final Vector contents = new Vector();
    
    private Command ok;
    private CenterCommand centerCommand;
    
    public static void hide()
    {
        isShown = false;
    }
    
    public synchronized static void showModeless(String title,String text)
    {
        if (instance == null)
        {
            instance = new MessageBox();
            isShown = false;
        }
        
        if (isShown)
        {
            instance.addContent(title, text);
        }
        else
        {
            instance.setContent(title, text);
            instance.showModeless();
        }
    }
    
    private MessageBox()
    {
        super();

        init();
    }

    private synchronized void addContent(String title, String text)
    {
        contents.addElement(new ContentPair(title, text));
    }
    
    private void setContent(String title, String text)
    {
        setTitle(title.equals("") ? "message" : title);
        
        message.setText((new Label(text)).getText());
    }
    
    public synchronized void showModeless()
    {
        isShown = true;
        super.showModeless();
    }
    
    public synchronized void dispose()
    {
        isShown = false;
        super.dispose();
    }
    
    private void init()
    {
        setLayout(new BorderLayout());

        message = new TextArea("", 1, 30);
        message.setEditable(false);
        message.setGrowByContent(true);
        addComponent(BorderLayout.CENTER,message);
        
        ok = new Command("ok",OK_ID)
        {
            public void actionPerformed(ActionEvent evt)
            {
                synchronized(contents)
                {
                    if (contents.size() > 0)
                    {
                        ContentPair tmp = (ContentPair)contents.elementAt(0);
                        contents.removeElementAt(0);
                        
                        setContent(tmp.title, tmp.text);
                        
                        MessageBox.this.invalidate();
                    }
                    else
                    {
                        dispose();
                    }
                }
                evt.consume();
            }
        };
        centerCommand = new CenterCommand(ok);
        
        if (!Display.getInstance().isTouchScreenDevice())
        {
            addCommand(centerCommand);
        }    
        addCommand(ok);
    }
    
    private class ContentPair
    {
        String title;
        String text;
        
        public ContentPair(String title, String text)
        {
            this.title = title;
            this.text = text;
        }
    }
}
